/*
Copyright (c) 2007-2009, Yusuke Yamamoto
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.
    * Neither the name of the Yusuke Yamamoto nor the
      names of its contributors may be used to endorse or promote products
      derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY Yusuke Yamamoto ``AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL Yusuke Yamamoto BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package weibo4j;

import java.util.List;

/**
 * A listner for receiving asynchronous responses from Weibo Async APIs.
 *
 * @see weibo4j.AsyncWeibo
 * @see weibo4j.WeiboAdapter
 * @author Yusuke Yamamoto - yusuke at mac.com
 */
public interface WeiboListener {
    /**
     * @deprecated use createdBlock instead
     */
    @Deprecated
	void blocked(User user);

    /**
     * @deprecated use createdFriendship instead
     */
    @Deprecated
	void created(User user);

    /**
     * @since Weibo4J 2.0.1
     */
    void createdBlock(User user);

    void createdFavorite(Status status);

    /**
     * @since Weibo4J 2.0.1
     */
    void createdFriendship(User user);

    /**
     * @deprecated use destroyedDirectMessage instead
     */
    @Deprecated
	void deletedDirectMessage(DirectMessage message);

    /**
     * @deprecated use destroyedFriendship instead
     */
    @Deprecated
	void destroyed(User user);

    /**
     * @since Weibo4J 2.0.1
     */
    void destroyedBlock(User user);

    /**
     * @since Weibo4J 2.0.1
     */
    void destroyedDirectMessage(DirectMessage message);

    void destroyedFavorite(Status status);
    /**
     * @since Weibo4J 2.0.1
     */
    void destroyedFriendship(User user);
    void destroyedStatus(Status destroyedStatus);
    /**
     * @since Weibo4J 2.0.1
     */
    void disabledNotification(User user);

    /**
     * @since Weibo4J 2.0.1
     */
    void enabledNotification(User user);

    /**
     * @deprecated use enabledNotification instead
     */
    @Deprecated
	void followed(User user);

    /**
     * @since Weibo4J 2.0.4
     */
    void gotBlockingUsers(List<User> blockingUsers);

    /**
     * @since Weibo4J 2.0.4
     */
    void gotBlockingUsersIDs(IDs blockingUsersIDs);

    /**
     * @since Weibo4J 2.0.2
     */
    void gotCurrentTrends(Trends trends);

    /**
     * @since Weibo4J 2.0.2
     */
    void gotDailyTrends(List<Trends> trendsList);

    void gotDirectMessages(List<DirectMessage> messages);

    /**
     * @deprecated not supported by Weibo API anymore
     */
    @Deprecated
	void gotDowntimeSchedule(String schedule);

    /**
     * @deprecated use gotExistsFriendship instead
     */
    @Deprecated
	void gotExists(boolean exists);

    /**
     * @since Weibo4J 2.0.4
     */
    void gotExistsBlock(boolean blockExists);

    /**
     * @since Weibo4J 2.0.1
     */
    void gotExistsFriendship(boolean exists);

    void gotFavorites(List<Status> statuses);

    void gotFeatured(List<User> users);

    void gotFollowers(List<User> users);

    void gotFollowersIDs(IDs ids);

    void gotFriends(List<User> users);

    void gotFriendsIDs(IDs ids);

    void gotFriendsTimeline(List<Status> statuses);

    /**
     * @since Weibo4J 2.0.10
     */
    void gotHomeTimeline(List<Status> statuses);

    /**
     * @since Weibo4J 2.0.1
     */
    void gotMentions(List<Status> statuses);

    void gotPublicTimeline(List<Status> statuses);

    void gotRateLimitStatus(RateLimitStatus rateLimitStatus);

    /**
     * @deprecated use gotMentions instead
     */
    @Deprecated
	void gotReplies(List<Status> statuses);

    /**
     * @since Weibo4J 2.0.10
     */
    void gotRetweetedByMe(List<Status> statuses);

    /**
     * @since Weibo4J 2.0.10
     */
    void gotRetweetedToMe(List<Status> statuses);

    /**
     * @since Weibo4J 2.0.10
     */
    void gotRetweetsOfMe(List<Status> statuses);

    void gotSentDirectMessages(List<DirectMessage> messages);

    /**
     * @deprecated use gotShowStatus instead
     */
    @Deprecated
	void gotShow(Status status);
    /**
     * @since Weibo4J 2.0.1
     */
    void gotShowStatus(Status status);

    /**
     * @since Weibo4J 2.0.2
     */
    void gotTrends(Trends trends);
    void gotUserDetail(User user);

    void gotUserTimeline(List<Status> statuses);

    /**
     * @since Weibo4J 2.0.2
     */
    void gotWeeklyTrends(List<Trends> trendsList);

    /**
     * @deprecated use disabledNotification instead
     */
    @Deprecated
	void left(User user);

    /**
     * @param te     WeiboException
     * @param method int
     */
    void onException(WeiboException te, int method);

    /**
     * @since Weibo4J 2.0.10
     */
    void retweetedStatus(Status retweetedStatus);
    
    void searched(QueryResult queryResult);

    void sentDirectMessage(DirectMessage message);

    void tested(boolean test);

    /**
     * @deprecated use destroyedBlock instead
     */
    @Deprecated
	void unblocked(User user);

    /**
     * @deprecated use updatedStatus instead
     */
    @Deprecated
	void updated(Status status);

    void updatedDeliverlyDevice(User user);

    /**
     * @deprecated Use updatedProfile instead
     */
    @Deprecated
	void updatedLocation(User user);

    /**
     * @since Weibo4J 2.0.2
     */
    void updatedProfile(User user);

    void updatedProfileColors(User user);

    void updatedStatus(Status status);

}
